Table-per-Class, Single Table, এবং Joined Table Inheritance Strategy

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - JPA Inheritance Mapping
149

স্প্রিং বুট এবং JPA (Java Persistence API) বিভিন্ন ধরণের ইনহেরিটেন্স স্ট্র্যাটেজি প্রদান করে। ইনহেরিটেন্স স্ট্র্যাটেজি ডেটাবেসে অবজেক্ট-ওরিয়েন্টেড সম্পর্ককে টেবিল ফর্ম্যাটে মানচিত্র করতে সাহায্য করে। JPA তিনটি প্রধান ইনহেরিটেন্স স্ট্র্যাটেজি প্রদান করে:

  • Table-per-Class
  • Single Table
  • Joined Table

Table-per-Class Strategy

সংজ্ঞা

এই স্ট্র্যাটেজিতে প্রতিটি ক্লাসের জন্য একটি স্বতন্ত্র টেবিল তৈরি করা হয়। বেস ক্লাস এবং ডেরাইভড ক্লাসের ডেটা আলাদাভাবে সংরক্ষণ করা হয়।

বৈশিষ্ট্য

  • প্রতিটি ক্লাসের জন্য আলাদা টেবিল।
  • ডেটাবেসে সম্পর্কিত ডেটা রাখতে দ্রুত এবং সহজ।
  • ডুপ্লিকেট কলাম থাকতে পারে।

কনফিগারেশন

Inheritance Type: InheritanceType.TABLE_PER_CLASS

উদাহরণ

import jakarta.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Vehicle {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
public class Car extends Vehicle {
    private int seatingCapacity;

    // Getters and Setters
}

@Entity
public class Bike extends Vehicle {
    private boolean hasCarrier;

    // Getters and Setters
}

টেবিল গঠন

  • Car Table: id, name, seatingCapacity
  • Bike Table: id, name, hasCarrier

Single Table Strategy

সংজ্ঞা

এই স্ট্র্যাটেজিতে সমস্ত ক্লাসের ডেটা একটি টেবিলে রাখা হয়। টেবিলটি একটি discriminator column ব্যবহার করে ডেটা আলাদা করে।

বৈশিষ্ট্য

  • ডেটার জন্য শুধুমাত্র একটি টেবিল।
  • স্টোরেজ দক্ষ।
  • বড় টেবিলে অনেক নাল ভ্যালু থাকতে পারে।

কনফিগারেশন

Inheritance Type: InheritanceType.SINGLE_TABLE

উদাহরণ

import jakarta.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vehicle_type", discriminatorType = DiscriminatorType.STRING)
public abstract class Vehicle {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
    private int seatingCapacity;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("BIKE")
public class Bike extends Vehicle {
    private boolean hasCarrier;

    // Getters and Setters
}

টেবিল গঠন

  • Vehicle Table: id, name, vehicle_type, seatingCapacity, hasCarrier

Joined Table Strategy

সংজ্ঞা

এই স্ট্র্যাটেজিতে প্রতিটি ক্লাসের জন্য আলাদা টেবিল থাকে, তবে তাদের মধ্যে সম্পর্ক গঠন করার জন্য JOIN অপারেশন ব্যবহৃত হয়।

বৈশিষ্ট্য

  • সম্পর্কিত ডেটা সংরক্ষণের জন্য কার্যকর।
  • ডেটার রিডন্ডেন্সি (Redundancy) কম।
  • কোয়েরির সময় জয়েন অপারেশন করার প্রয়োজন হয়।

কনফিগারেশন

Inheritance Type: InheritanceType.JOINED

উদাহরণ

import jakarta.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Vehicle {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    // Getters and Setters
}

@Entity
public class Car extends Vehicle {
    private int seatingCapacity;

    // Getters and Setters
}

@Entity
public class Bike extends Vehicle {
    private boolean hasCarrier;

    // Getters and Setters
}

টেবিল গঠন

  • Vehicle Table: id, name
  • Car Table: id, seatingCapacity
  • Bike Table: id, hasCarrier

পার্থক্য

বৈশিষ্ট্যTable-per-ClassSingle TableJoined Table
সংরক্ষণ কৌশলপ্রতিটি ক্লাসের জন্য আলাদা টেবিলএকক টেবিলে সমস্ত ডেটাসম্পর্কিত টেবিল ব্যবহার
ডেটার অখণ্ডতাকমকমবেশি
স্টোরেজ দক্ষতাকমবেশিমাঝারি
কোয়েরি জটিলতাকমসহজবেশি
নাল ভ্যালু সমস্যানাহ্যাঁনা

সারাংশ

Spring Boot এবং JPA-তে Table-per-Class, Single Table, এবং Joined Table ইনহেরিটেন্স স্ট্র্যাটেজি ব্যবহার করে ডেটাবেস সম্পর্ক গঠন এবং ডেটা সংরক্ষণ করা যায়। প্রতিটি স্ট্র্যাটেজির নিজস্ব সুবিধা এবং সীমাবদ্ধতা রয়েছে। আপনার প্রয়োজন অনুসারে স্ট্র্যাটেজি বেছে নেওয়া উচিত।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...